package com.quan.common.utils.seqnum;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import org.apache.commons.lang3.RandomStringUtils;

import com.quan.common.base.enums.DateStyle;
import com.quan.common.utils.DateUtils;

/**
 * 自增序列工具类
 * @author yhaoquan
 *
 */
public class StringUtil {
	static final int DEFAULT_LENGTH = 6;
	 
	/**
	 * 判断是否超过规定的位数，未超过前面补0，超过直接返回
	 * @param seq
	 * @return
	 */
	public static String getSequence(long seq) {
		String str = String.valueOf(seq);
		int length = str.length();
		if (length >= DEFAULT_LENGTH) {// 每天超过6位
			return str;
		}
		int rest = DEFAULT_LENGTH - length;
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < rest; i++) {
			sb.append('0');
		}
		sb.append(str);
		return sb.toString();
	}
 
	/**
	 * 
	 * @Title: autoCOS 
	 * @Description: 补全6位字符串（Auto completion of string） 
	 * @return 参数
	 * @return String 返回类型 
	 * @throws
	 */
	public static String autoCOS(String value) {
 
		int length = value.length();
		if (length >= DEFAULT_LENGTH) {
			return value;
		}
		int rest = DEFAULT_LENGTH - length;
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < rest; i++) {
			sb.append('0');
		}
		sb.append(value);
		return sb.toString();
	}
 
	/**
	 * 
	 * @Title: isLegal
	 * @Description: 对bizCode进行白名单验证，以免恶意伪造
	 * @param
	 * @return 参数
	 * @return boolean 返回类型
	 * @throws BizCodeException
	 */
	public static boolean isLegal(String bizCode) {
		if (bizCode == null || bizCode.length() != 2) {
			throw new RuntimeException(bizCode);
		}
		if (Character.isDigit(bizCode.charAt(0)) && Character.isDigit(bizCode.charAt(1)))
			return true;
		return false;
	}
 
	/**
	 * 
	 * @Title: getPacName
	 * @Description: 获取包名
	 * @param @return 参数
	 * @return String 返回类型
	 */
	public static String getPacName() {
		String clzName = Thread.currentThread().getStackTrace()[1].getClassName();
		int index = clzName.lastIndexOf(".");
		String pacName = clzName.substring(0, index) + ":";
		return pacName;
	}
 
	/**
	 * 
	 * @Title: getRandom
	 * @Description: 获取四位随机数
	 * @param @return 参数
	 * @return String 返回类型
	 */
	public static Set<String> m = new HashSet<String>();
 
	public static String getRandom() {
		String randomDigit;
		do {
			randomDigit = RandomStringUtils.random(4, false, true);
		} while (m.contains(randomDigit));
		m.add(randomDigit);
		return randomDigit;
	}
 
	/**
	 * 
	 * @Title: getToday
	 * @Description: 获取今天的日期:yyyyMMdd
	 * @param @return 参数
	 * @return String 返回类型
	 */
	public static String getToday() {
		return new SimpleDateFormat("yyyyMMdd").format(new Date());
	}
	
	/**
	 * 获取到24点整的过期时间（秒）
	 * 24点毫秒-当前毫秒=离24点整的剩余毫秒
	 * @param currentTime
	 * @return
	 */
	public static long expire(long currentTime) {
		String formatMillSecDateTime = DateUtils.formatMillSecDateTime(currentTime) ;
		Date currentDate = DateUtils.parse(formatMillSecDateTime, DateStyle.YYYY_MM_DD_HH_MM_SS) ;
		
		long curMin = currentDate.getTime() ; //当前时间毫秒
		long end24Min = DateUtils.get24HourMilliSecond() ; //当前24点整毫秒
		
		long residue = (end24Min - curMin) / 1000 ; //剩余多少秒到24点
		
		return residue ;
	}
 
}
